home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / src / linux-headers-2.6.28-15 / arch / arm / include / asm / page.h < prev    next >
Encoding:
C/C++ Source or Header  |  2008-12-24  |  4.3 KB  |  201 lines

  1. /*
  2.  *  arch/arm/include/asm/page.h
  3.  *
  4.  *  Copyright (C) 1995-2003 Russell King
  5.  *
  6.  * This program is free software; you can redistribute it and/or modify
  7.  * it under the terms of the GNU General Public License version 2 as
  8.  * published by the Free Software Foundation.
  9.  */
  10. #ifndef _ASMARM_PAGE_H
  11. #define _ASMARM_PAGE_H
  12.  
  13. /* PAGE_SHIFT determines the page size */
  14. #define PAGE_SHIFT        12
  15. #define PAGE_SIZE        (1UL << PAGE_SHIFT)
  16. #define PAGE_MASK        (~(PAGE_SIZE-1))
  17.  
  18. #ifndef __ASSEMBLY__
  19.  
  20. #ifndef CONFIG_MMU
  21.  
  22. #include "page-nommu.h"
  23.  
  24. #else
  25.  
  26. #include <asm/glue.h>
  27.  
  28. /*
  29.  *    User Space Model
  30.  *    ================
  31.  *
  32.  *    This section selects the correct set of functions for dealing with
  33.  *    page-based copying and clearing for user space for the particular
  34.  *    processor(s) we're building for.
  35.  *
  36.  *    We have the following to choose from:
  37.  *      v3        - ARMv3
  38.  *      v4wt        - ARMv4 with writethrough cache, without minicache
  39.  *      v4wb        - ARMv4 with writeback cache, without minicache
  40.  *      v4_mc        - ARMv4 with minicache
  41.  *      xscale    - Xscale
  42.  *      xsc3        - XScalev3
  43.  */
  44. #undef _USER
  45. #undef MULTI_USER
  46.  
  47. #ifdef CONFIG_CPU_COPY_V3
  48. # ifdef _USER
  49. #  define MULTI_USER 1
  50. # else
  51. #  define _USER v3
  52. # endif
  53. #endif
  54.  
  55. #ifdef CONFIG_CPU_COPY_V4WT
  56. # ifdef _USER
  57. #  define MULTI_USER 1
  58. # else
  59. #  define _USER v4wt
  60. # endif
  61. #endif
  62.  
  63. #ifdef CONFIG_CPU_COPY_V4WB
  64. # ifdef _USER
  65. #  define MULTI_USER 1
  66. # else
  67. #  define _USER v4wb
  68. # endif
  69. #endif
  70.  
  71. #ifdef CONFIG_CPU_COPY_FEROCEON
  72. # ifdef _USER
  73. #  define MULTI_USER 1
  74. # else
  75. #  define _USER feroceon
  76. # endif
  77. #endif
  78.  
  79. #ifdef CONFIG_CPU_SA1100
  80. # ifdef _USER
  81. #  define MULTI_USER 1
  82. # else
  83. #  define _USER v4_mc
  84. # endif
  85. #endif
  86.  
  87. #ifdef CONFIG_CPU_XSCALE
  88. # ifdef _USER
  89. #  define MULTI_USER 1
  90. # else
  91. #  define _USER xscale_mc
  92. # endif
  93. #endif
  94.  
  95. #ifdef CONFIG_CPU_XSC3
  96. # ifdef _USER
  97. #  define MULTI_USER 1
  98. # else
  99. #  define _USER xsc3_mc
  100. # endif
  101. #endif
  102.  
  103. #ifdef CONFIG_CPU_COPY_V6
  104. # define MULTI_USER 1
  105. #endif
  106.  
  107. #if !defined(_USER) && !defined(MULTI_USER)
  108. #error Unknown user operations model
  109. #endif
  110.  
  111. struct cpu_user_fns {
  112.     void (*cpu_clear_user_page)(void *p, unsigned long user);
  113.     void (*cpu_copy_user_page)(void *to, const void *from,
  114.                    unsigned long user);
  115. };
  116.  
  117. #ifdef MULTI_USER
  118. extern struct cpu_user_fns cpu_user;
  119.  
  120. #define __cpu_clear_user_page    cpu_user.cpu_clear_user_page
  121. #define __cpu_copy_user_page    cpu_user.cpu_copy_user_page
  122.  
  123. #else
  124.  
  125. #define __cpu_clear_user_page    __glue(_USER,_clear_user_page)
  126. #define __cpu_copy_user_page    __glue(_USER,_copy_user_page)
  127.  
  128. extern void __cpu_clear_user_page(void *p, unsigned long user);
  129. extern void __cpu_copy_user_page(void *to, const void *from,
  130.                  unsigned long user);
  131. #endif
  132.  
  133. #define clear_user_page(addr,vaddr,pg)     __cpu_clear_user_page(addr, vaddr)
  134. #define copy_user_page(to,from,vaddr,pg) __cpu_copy_user_page(to, from, vaddr)
  135.  
  136. #define clear_page(page)    memzero((void *)(page), PAGE_SIZE)
  137. extern void copy_page(void *to, const void *from);
  138.  
  139. #undef STRICT_MM_TYPECHECKS
  140.  
  141. #ifdef STRICT_MM_TYPECHECKS
  142. /*
  143.  * These are used to make use of C type-checking..
  144.  */
  145. typedef struct { unsigned long pte; } pte_t;
  146. typedef struct { unsigned long pmd; } pmd_t;
  147. typedef struct { unsigned long pgd[2]; } pgd_t;
  148. typedef struct { unsigned long pgprot; } pgprot_t;
  149.  
  150. #define pte_val(x)      ((x).pte)
  151. #define pmd_val(x)      ((x).pmd)
  152. #define pgd_val(x)    ((x).pgd[0])
  153. #define pgprot_val(x)   ((x).pgprot)
  154.  
  155. #define __pte(x)        ((pte_t) { (x) } )
  156. #define __pmd(x)        ((pmd_t) { (x) } )
  157. #define __pgprot(x)     ((pgprot_t) { (x) } )
  158.  
  159. #else
  160. /*
  161.  * .. while these make it easier on the compiler
  162.  */
  163. typedef unsigned long pte_t;
  164. typedef unsigned long pmd_t;
  165. typedef unsigned long pgd_t[2];
  166. typedef unsigned long pgprot_t;
  167.  
  168. #define pte_val(x)      (x)
  169. #define pmd_val(x)      (x)
  170. #define pgd_val(x)    ((x)[0])
  171. #define pgprot_val(x)   (x)
  172.  
  173. #define __pte(x)        (x)
  174. #define __pmd(x)        (x)
  175. #define __pgprot(x)     (x)
  176.  
  177. #endif /* STRICT_MM_TYPECHECKS */
  178.  
  179. #endif /* CONFIG_MMU */
  180.  
  181. typedef struct page *pgtable_t;
  182.  
  183. #include <asm/memory.h>
  184.  
  185. #endif /* !__ASSEMBLY__ */
  186.  
  187. #define VM_DATA_DEFAULT_FLAGS \
  188.     (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \
  189.      VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC)
  190.  
  191. /*
  192.  * With EABI on ARMv5 and above we must have 64-bit aligned slab pointers.
  193.  */
  194. #if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5)
  195. #define ARCH_SLAB_MINALIGN 8
  196. #endif
  197.  
  198. #include <asm-generic/page.h>
  199.  
  200. #endif
  201.